package jiazhong.hfl20250315;

// 3.给你一个整数集合 nums ，集合中的元素互不相同。返回该集合所有可能的子集。子集不能包含重复的子集。你可以按任意顺序返回子集。
import java.util.ArrayList;
import java.util.List;

// 二进制法
public class Subset {

    public static List<List<Integer>> subsets(int[] nums) {
        List<List<Integer>> subLists = new ArrayList<>();
        List<Integer> emptyList = new ArrayList<>();
        subLists.add(emptyList); // 空集
        if (nums == null || nums.length == 0) { // 空数组直接返回空集
            return subLists;
        }else {
            int length = nums.length; // 数组长度
            for (int i = 0; i < length; i++) {
                int size = subLists.size(); // 当前子集个数
                for (int j = 0; j < size; j++) {
                    List<Integer> subList = new ArrayList<>(subLists.get(j)); // 复制当前子集
                    subList.add(nums[i]); // 加入当前元素
                    subLists.add(subList); // 加入新子集
                }
            }
            return subLists; // 返回所有子集
        }
    }

    public static void main(String[] args) {
        int [] nums = {1,2,3};
        List<List<Integer>> subsets = subsets(nums);
        System.out.println(subsets);
    }
}
